home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / obexftp / client.h next >
C/C++ Source or Header  |  2006-05-08  |  5KB  |  200 lines

  1. /*
  2.  *  obexftp/client.h: ObexFTP client library
  3.  *
  4.  *  Copyright (c) 2002 Christian W. Zuckschwerdt <zany@triq.net>
  5.  *
  6.  *  This program is free software; you can redistribute it and/or modify it
  7.  *  under the terms of the GNU General Public License as published by the Free
  8.  *  Software Foundation; either version 2 of the License, or (at your option)
  9.  *  any later version.
  10.  *
  11.  *  This program is distributed in the hope that it will be useful, but
  12.  *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  13.  *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14.  *  for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License
  17.  *  along with this program; if not, write to the Free Software
  18.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19.  *     
  20.  */
  21.  
  22. #ifndef OBEXFTP_CLIENT_H
  23. #define OBEXFTP_CLIENT_H
  24.  
  25. #include <inttypes.h>
  26. #include <sys/stat.h>
  27. #include <time.h>
  28. #include <openobex/obex.h>
  29. #ifndef OBEX_TRANS_USB
  30. #define OBEX_TRANS_USB        6
  31. #endif
  32. #include "obexftp.h"
  33. #include "object.h"
  34. #include "uuid.h"
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39.  
  40.  
  41. /* quirks */
  42.  
  43. #define OBEXFTP_LEADING_SLASH    0x01    /* used in get (and alike) */
  44. #define OBEXFTP_TRAILING_SLASH    0x02    /* used in list */
  45. #define OBEXFTP_SPLIT_SETPATH    0x04    /* some phones dont have a cwd */
  46. #define OBEXFTP_CONN_HEADER    0x08    /* do we even need this? */
  47.  
  48. #define OBEXFTP_USE_LEADING_SLASH(x)    ((x & OBEXFTP_LEADING_SLASH) != 0)
  49. #define OBEXFTP_USE_TRAILING_SLASH(x)    ((x & OBEXFTP_TRAILING_SLASH) != 0)
  50. #define OBEXFTP_USE_SPLIT_SETPATH(x)    ((x & OBEXFTP_SPLIT_SETPATH) != 0)
  51. #define OBEXFTP_USE_CONN_HEADER(x)    ((x & OBEXFTP_CONN_HEADER) != 0)
  52.  
  53. /* dont disable leading slashes unless you disable split setpath */
  54. #define DEFAULT_OBEXFTP_QUIRKS    \
  55.     (OBEXFTP_LEADING_SLASH | OBEXFTP_TRAILING_SLASH | OBEXFTP_SPLIT_SETPATH | OBEXFTP_CONN_HEADER)
  56. #define DEFAULT_CACHE_TIMEOUT 180    /* 3 minutes */
  57. #define DEFAULT_CACHE_MAXSIZE 10240    /* 10k */
  58.  
  59.  
  60. /* types */
  61.  
  62. typedef struct stat_entry stat_entry_t;
  63. struct stat_entry {
  64.     char name[256];
  65.     mode_t mode;
  66.     int size;
  67.     time_t mtime;
  68. };
  69.  
  70. typedef struct cache_object cache_object_t;
  71. struct cache_object
  72. {
  73.     cache_object_t *next;
  74.     int refcnt;
  75.     time_t timestamp;
  76.     int size;    /* or uint32_t */
  77.     char *name;
  78.     char *content;    /* or uint8_t */
  79.     stat_entry_t *stats;    /* only if its a parsed directory */
  80. };
  81.  
  82. typedef struct obexftp_client
  83. {
  84.     /* state */
  85.     obex_t *obexhandle;
  86.     uint32_t connection_id; /* set to 0xffffffff if unused */
  87.     obex_ctrans_t *ctrans; /* only valid with OBEX_TRANS_CUSTOM */
  88.     int transport; /* the transport for obexhandle */
  89.     int finished;
  90.     int success;
  91.     int obex_rsp;
  92.     int mutex;    /* should be using pthreads for this */
  93.     int quirks;
  94.     /* client */
  95.     obexftp_info_cb_t infocb;
  96.     void *infocb_data;
  97.     /* transfer (put) */
  98.     int fd; /* used in put body */
  99.     uint8_t *stream_chunk;
  100.     uint32_t out_size;
  101.     uint32_t out_pos;
  102.     const uint8_t *out_data;
  103.     /* transfer (get) */
  104.     char *target_fn; /* used in get body */
  105.     uint32_t buf_size; /* not size but len... */
  106.     uint8_t *buf_data;
  107.     uint32_t apparam_info;
  108.     /* persistence */
  109.     cache_object_t *cache;
  110.     int cache_timeout;
  111.     int cache_maxsize;
  112. } obexftp_client_t;
  113.  
  114.  
  115. /* session */
  116.  
  117. /*@null@*/ obexftp_client_t *obexftp_open(int transport,
  118.                  /*@null@*/ /*const*/ obex_ctrans_t *ctrans,
  119.                  /*@null@*/ obexftp_info_cb_t infocb,
  120.                  /*@null@*/ void *infocb_data);
  121.  
  122. void obexftp_close(/*@only@*/ /*@out@*/ /*@null@*/ obexftp_client_t *cli);
  123.  
  124. int obexftp_connect_uuid(obexftp_client_t *cli,
  125.                 /*@null@*/ const char *device, /* for INET, BLUETOOTH */
  126.                 int port, /* INET(?), BLUETOOTH, USB*/
  127.                 /*@null@*/ const uint8_t uuid[], uint32_t uuid_len);
  128.  
  129. #define    obexftp_connect(cli, device, port) \
  130.     obexftp_connect_uuid(cli, device, port, UUID_FBS, sizeof(UUID_FBS))
  131.  
  132. int obexftp_disconnect(obexftp_client_t *cli);
  133.  
  134.  
  135. /* transfer */
  136.  
  137. int obexftp_setpath(obexftp_client_t *cli, /*@null@*/ const char *name, int create);
  138.  
  139. #define    obexftp_chpath(cli, name) \
  140.     obexftp_setpath(cli, name, 0)
  141.  
  142. #define    obexftp_mkpath(cli, name) \
  143.     obexftp_setpath(cli, name, 1)
  144.  
  145. #define    obexftp_cdup(cli) \
  146.     obexftp_setpath(cli, NULL, 0)
  147.  
  148. #define    obexftp_cdtop(cli) \
  149.     obexftp_setpath(cli, "", 0)
  150.  
  151. int obexftp_get_type(obexftp_client_t *cli,
  152.          const char *type,
  153.          /*@null@*/ const char *localname,
  154.          /*@null@*/ const char *remotename);
  155.  
  156. #define    obexftp_get(cli, localname, remotename) \
  157.     obexftp_get_type(cli, NULL, localname, remotename)
  158.  
  159. #define    obexftp_list(cli, localname, remotename) \
  160.     obexftp_get_type(cli, XOBEX_LISTING, localname, remotename)
  161.  
  162. #define    obexftp_get_capability(cli, localname, remotename) \
  163.     obexftp_get_type(cli, XOBEX_CAPABILITY, localname, remotename)
  164.  
  165. int obexftp_put_file(obexftp_client_t *cli, const char *filename,
  166.              const char *remotename);
  167.  
  168. int obexftp_put_data(obexftp_client_t *cli, const char *data, int size,
  169.              const char *remotename);
  170.  
  171. int obexftp_del(obexftp_client_t *cli, const char *name);
  172.  
  173.  
  174. /* Siemens only */
  175.  
  176. int obexftp_info(obexftp_client_t *cli, uint8_t opcode);
  177.  
  178. int obexftp_rename(obexftp_client_t *cli,
  179.            const char *sourcename,
  180.            const char *targetname);
  181.  
  182.  
  183. /* compatible directory handling */
  184.  
  185. void *obexftp_opendir(obexftp_client_t *cli, const char *name);
  186.  
  187. int obexftp_closedir(void *dir);
  188.  
  189. stat_entry_t *obexftp_readdir(void *dir);
  190.  
  191. stat_entry_t *obexftp_stat(obexftp_client_t *cli, const char *name);
  192.  
  193.  
  194. #ifdef __cplusplus
  195. }
  196. #endif
  197.  
  198. #endif /* OBEXFTP_CLIENT_H */
  199.  
  200.